package cn.lic.tool.poi.excel.function.impl;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.apache.poi.ss.usermodel.Cell;

import com.alibaba.fastjson.JSONObject;

import cn.lic.tool.poi.excel.ParserUtils;
import cn.lic.tool.poi.excel.function.AbstractFunction;
import cn.lic.tool.poi.excel.function.IFunction;
import cn.lic.tool.poi.excel.function.IFunctionArgument;
import cn.lic.tool.poi.excel.function.IValue;
import cn.lic.tool.poi.excel.function.Range;
import cn.lic.tool.poi.excel.function.IValue.Type;

/**
 * 日期格式化
 * 第一个参数为日期值, 第二个参数为日期格式
 * @author Administrator
 *
 */
public class DateTimeFormat extends AbstractFunction  {
	public DateTimeFormat() {}
	public DateTimeFormat(IFunctionArgument[] args) {
		this.args = args;
	}

	@Override
	public IFunction build(IFunctionArgument[] args) {
		return new DateTimeFormat(args);
	}
	
	@Override
	public IValue execute(JSONObject ctx) {
		IValue dateValue = this.getArg(0, ctx);
		Object dateObject = dateValue.castValue(IValue.Type.OBJECT);
		if (dateObject == null) {
			return IValue.buildSValue("");
		}
		Date date = (Date)dateObject;
		
		String format = this.getArg(1, ctx).castValue(IValue.Type.STRING, "yyy-MM-dd hh:mm:ss");
		
		DateFormat df = new SimpleDateFormat(format);
		return IValue.buildSValue(df.format(date));
	}
	
	@Override
	public Range execute(JSONObject ctx, Cell cell) {
		IValue val = this.execute(ctx);
		ParserUtils.setCellValue(cell, val);
		return null;
	}
	
}
